package main

import "sync"

type Counter struct {
	mu    sync.Mutex
	value int
}

/**
我们的测试将不再编译，因为我们试图通过一个 Counter 而不是一个 *Counter。
为了解决这个问题，我倾向于创建一个构造函数，它向 API 的读者显示，最好不要自己初始化类型。
*/
func NewCounter() *Counter {
	return &Counter{}
}

func (c *Counter) Inc() {
	c.mu.Lock()
	defer c.mu.Unlock()
	c.value++
}

func (c *Counter) Value() int {
	return c.value
}
